package org.kazuhiko.pokemon3d.entity;

import static org.lwjgl.opengl.GL11.glCallList;
import static org.lwjgl.opengl.GL11.glPopMatrix;
import static org.lwjgl.opengl.GL11.glPushMatrix;
import static org.lwjgl.opengl.GL11.glRotatef;
import static org.lwjgl.opengl.GL11.glTranslatef;

import java.io.File;
import java.io.IOException;

import org.kazuhiko.pokemon3d.utility.loader.OBJLoader;

public abstract class TexturedModelEntity extends ModelEntity
{	
	public TexturedModelEntity( int id, String name, String modelLocation )
	{
		super( id, name, modelLocation );
		
		prepare();
	}
	
	@Override
	public void prepare()
	{
		try
		{
			setModel( OBJLoader.loadTexturedModel( new File( getModelLocation() ) ) );
			getModel().enableStates();
			setList( OBJLoader.createTexturedDisplayList( getModel() ) );
			setWidth( getModel().getWidth() );
			setHeight( getModel().getHeight() );
			setDepth( getModel().getDepth() );
		}
		catch ( IOException e )
		{
			e.printStackTrace();
		}
	}
	
	@Override
	public void render()
	{
		glPushMatrix();
		glTranslatef( x(), y(), z() );
		glRotatef( -yaw() + -getDefaultYaw(), 0, 1, 0 );
		glCallList( getList() );
		glPopMatrix();
	}
}
